
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>

#define _GNU_SOURCE
//不定参宏函数的使用
//如果不定参为空，则取消前面逗号
#define LOG(fmt,...) printf("[%s:%d]" fmt,__FILE__,__LINE__,##__VA_ARGS__)

//不定参函数的使用
void printfNum(int count,...)
{
    va_list ap;//列表
    va_start(ap,count);//获取不定参数的起始地址
    for(int i=0;i<count;i++)
    {
        int num=va_arg(ap,int);
        printf("parm[%d]:%d\n",i,num);
    }
    va_end(ap);//清空列表
}

void myprintf(const char* fmt,...)
{
    va_list ap;
    va_start(ap,fmt);
    char* res;
    int ret=vasprintf(&res,fmt,ap);
    if(ret!=-1)
    {
        printf(res);
        free(res);
    }
    va_end(ap);
}
int main()
{
    // printf("[%s:%d]:%s-%d\n",__FILE__,__LINE__,"hello world",123);
    // LOG(":hello world\n");
    // printfNum(3,111,222,333);
    myprintf("%s,%d\n","hello-world",12345);

    return 0;
}